package ui;

import entity.*;
import service.*;
import service.impl.*;
import untils.Msg;
import untils.ResultPage;

import java.sql.Date;
import java.util.*;

public class SystemUi {
    //创建学生业务逻辑层对象
    static BaseService baseService = new BaseServiceImpl();
    static AdminService adminService = new AdminServiceImpl();

    static UserService userService = new UserServiceImpl();
    static TrainService trainService = new TrainServiceImpl();

    static BuyTicketsService buyTicketsService = new BuyTicketsServiceImpl();
    public static User user;   //保存登录成功后的用户信息

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        Msg<User> msg = null;
        System.out.println("***************欢迎登录火车旅客信息管理系统****************");
        //永真循环，while内的代码会一直循环执行
        loop1:
        while (true) {
            System.out.println("\n1.登录  2.注册  3.退出");
            System.out.println("请选择:");
            //获取输入的数字
            int selected = sc.nextInt();
            //如果选择1.登录；如果选择2.注册； 如果选择3,执行退出登录
            switch (selected) {
                case 1:
                    //调用登录功能
                    msg = Login();
                    user = msg.getData();
                    if (user != null) {
                        if ("SUCCEED".equals(Msg.msg) && msg.getData().getRole().equals("管理员")) {
                            System.out.println("欢迎登录火车旅客信息管理系统" + "\n" + "管理员：" + msg.getData().getUserName());
                            loop2:
                            while (true) {
                                System.out.println("1.查看个人账户信息，2.用户信息管理 3.车次信息管理，4.管理员管理，5.订单管理，6.发布车辆状态信息，7.发布通知公告");
                                System.out.println("请选择");
                                int select = sc.nextInt();
                                switch (select) {
                                    case 1:
                                        System.out.println(PersonalData());
                                        System.out.println("是否修改个人信息(y/n) ");
                                        String mark = sc.next();
                                        if (mark.equals("y")) {
                                            updatePersonalData(user);
                                            //执行修改的方法
                                        }
                                        break;

                                    case 2:
                                        System.out.println("1.查看用户信息、5.分页查看用户信息、6.退出");
                                        int select1 = sc.nextInt();
                                        switch (select1){
                                            case 1:
                                                //用户信息的查看
                                                findAllUserData();
                                                break ;
                                            case 2:
                                                //删除用户信息
                                                deleteUserData();
                                                break ;
                                            case 3:
                                                //修改用户信息
                                                updateUserData();
                                                break ;
                                            case 4:
                                                //添加用户信息
                                                addUserData();
                                                break ;
                                            case 5:
                                                //分页查询用户信息
                                                findPageUserList(1);
                                                break ;
                                            case 6:
                                                break ;
                                        }
                                        break;
                                    case 3:
                                        //车次信息的管理
                                        System.out.println("1.查看车次信息、2.车次信息的导入、3.修改车次信息 4退出");
                                        int select2 = sc.nextInt();
                                        switch (select2){
                                            case 1:
                                                findAllTrainData();
                                                //车次信息的查看
                                                break ;
                                            case 2:
                                                //车次信息的导入
                                                System.out.println("请输入要导入的车次文件");
                                                adminService.importTrainList();
                                                System.out.println(Msg.msg);
                                                break ;
                                            case 3:
                                                //车次信息的修改
                                                System.out.println("请输入要导入的座位文件");
                                                updateTrainsData();
                                                break ;
                                            case 4:
                                                break ;
                                        }
                                        //车次状态的修改
                                        //利用sql数据库的外部定时任务功能
                                        break;
                                    case 4:
                                        System.out.println("1.查询所有管理员信息 2.添加管理员 3.删除管理员 4.退出");

                                        int select4 = sc.nextInt();
                                        switch (select4){
                                            case 1:
                                                //查询所有管理员的信息
                                                findAllAdminData();
                                                break ;
                                            case 2:
                                                //添加管理员
                                                addAdminData();
                                                break ;
                                            case 3:
                                                //删除管理员
                                                deleteAdminData();
                                                break ;
                                            case 4:
                                                break ;
                                        }
                                        break;
                                    case 5:
                                        //订单管理
                                        //导出订单信息
                                        adminService.importOrdersList();
                                        System.out.println(Msg.msg);
                                        break;
                                    case 6:
                                        System.out.println("1.查看所有车辆信息 2.添加车辆信息 3.修改车辆信息 4.删除车辆信息 5.退出");
                                        //导入车辆名称及相关信息
                                        select = sc.nextInt();
                                        switch (select){
                                            case 1:
                                                //查看所有车辆信息
                                                trainService.viewTrainM();
                                                break;
                                                //添加车辆信息
                                            case 2:
                                                //完善车辆信息
                                                trainService.perfectTrainM();
                                                break;
                                                //修改车辆信息
                                            case 3:
                                                //修改车辆信息
                                                trainService.updateTrainM();
                                                break;
                                            case 4:
                                                //删除车辆信息
                                                trainService.deleteTrainM();
                                                break;
                                                //退出
                                            case 5:
                                                break loop2;
                                        }
                                        break;
                                    case 7:
                                        System.out.println("通知已经发布");
                                        //发布通知公告
                                    case 8:
                                        break loop2;
                                }
                            }

                        } else if ("SUCCEED".equals(Msg.msg)) {
                            System.out.println("欢迎登录火车旅客信息管理系统" + "\n" + "普通用户：" + msg.getData().getUserName());
                            loop3:
                            while (true) {
                                System.out.println("1.查看个人账户信息，2.查询车票 3.购票，4.查看个人订单（待支付，已支付，候补订单，本人车票），5.行程管理（改签用于退票）6.查看车辆状态，7.查看通知公告");
                                System.out.println("请选择");
                                int select = sc.nextInt();
                                switch (select) {
                                    case 1:
                                        System.out.println(PersonalData());
                                        System.out.println("是否修改个人信息(y/n) ");
                                        String mark = sc.next();
                                        if (mark.equals("y")) {
                                            updatePersonalData(user);
                                            //执行修改的方法
                                        }
                                        //查看个人账户信息
                                        //修改
                                        break;
                                    case 2:
                                        //查询车票信息
                                        findAllTrainData();
                                        break;
                                    case 3:
                                        //购票
                                        buyTickets(user.getUser_id(), user.getPhone());
                                        break;
                                    case 4:
                                        System.out.println("1.查看订单信息 2.查看未支付订单 3.查看本人车票信息 4.退出");
                                        int select5 = sc.nextInt();
                                        switch (select5){
                                            case 1:
                                                //查看订单信息
                                                findPaymentOrder();
                                                break ;
                                            case 2:
                                                //待支付
                                                //确定时间超过时间修改数据库数据
                                                findNotPaymentOrder();
                                                break ;
                                            case 3:
                                                //本人车票信息
                                                //findMyTicketsData();
                                                break ;
                                            case 4:
                                                break ;
                                        }
                                        //已支付
                                        //改签与退票
                                        //候补订单
                                        break;
                                    case 5:
                                        //行程管理
                                        System.out.println("1、改签，2、退票，3、退出");
                                        int select6 = sc.nextInt();
                                        //改签
                                        switch (select6){
                                            case 1:
                                                rebook();
                                                break ;
                                            case 2:
                                                //退票
                                                returnTickets();
                                                break ;
                                            case 3:
                                                break ;
                                        }
                                        break ;
                                    case 7:
                                        userService.lookExe();
                                        //查看发布通知信息
                                        break ;

                                    case 10:
                                        break loop3;
                                }
                            }
                        }
                    } else {
                        break;
                    }
                    break;
                case 2:
                    msg = register();
                    if (msg.getMsg() == "SUCCEED") {
                        Login();
                    }
                    break;
                case 3:
                    break loop1;
            }
        }
    }



    /**
     * 登录功能
     *
     * @return 返回Msg<User>类型的登录结果
     */
    //登录功能
    public static Msg<User> Login() {
        //学生登录
        //1.获取输入的用户名和密码
        System.out.println("请输入电话号码:");
        String inputPhone = sc.next();
        System.out.println("请输入密码:");
        String inputPwd = sc.next();

        //2、调用service中的登录方法  参数：String sname ,String pwd  返回值：String
        Msg<User> user = baseService.Login(inputPhone, inputPwd);
        String msg = user.getMsg();

        //3、得到返回结果并处理
        if ("USERNAME_ERROR".equals(msg)) {
            System.out.println("电话号码输入错误,请重新登录");
        } else if ("PWD_ERROR".equals(msg)) {
            System.out.println("密码输入错误,请重新登录");
        } else if ("SUCCEED".equals(msg)) {
            System.out.println(user.getData().getUserName() + "  欢迎您,登录成功" + "角色：" + user.getData().getRole());
        }
        return user;
    }

    /**
     * 注册用户
     *
     * @return 返回Msg<User>类型的注册结果
     */
    public static Msg<User> register() {
        System.out.println("请输入昵称");
        String username = sc.next();
        System.out.println("请输入密码");
        String password = sc.next();
        System.out.println("请输入姓名");
        String realName = sc.next();
        System.out.println("请输入电话");
        String phone = sc.next();
        System.out.println("请输入邮件");
        String email = sc.next();
        System.out.println("请输入身份证号码：");
        String idCard = sc.next();
        User user1 = new User(username, password, realName, phone, email);
        user1.setIdCard(idCard);
        Msg<User> user = baseService.register(user1);
        if (user.getMsg() == "SUCCEED") {
            System.out.println("注册成功");
        } else {
            System.out.println("注册失败");
        }
        return user;
    }

    /**
     * 打印个人信息
     * 该方法用于输出个人相关信息
     */
    public static User PersonalData() {
        return user;
    }

    public static Msg<User> updatePersonalData(User user) {
        Msg msg = null;
        String username = user.getUserName();
        String password = user.getPassword();
        String real_name = user.getReal_name();
        String phone = user.getPhone();
        String email = user.getEmail();
        System.out.println("请输入你想修改的信息：1.用户名，2.密码，3.真实姓名 4、电话号码 5.邮箱,6.确认修改 7、退出");
        loop1:
        while (true) {
            int select = sc.nextInt();
            switch (select) {
                case 1:
                    System.out.println("您的昵称为：" + user.getUserName());
                    System.out.println("请您输入您要修改的内容");
                    username = sc.next();
                    break;
                case 2:
                    System.out.println("您的密码为：" + user.getPassword());
                    System.out.println("请您输入您要修改的内容");
                    password = sc.next();
                    break;
                case 3:
                    System.out.println("您的真实姓名为：" + user.getReal_name());
                    System.out.println("请您输入您要修改的内容");
                    real_name = sc.next();
                    break;
                case 4:
                    System.out.println("您的电话号码为：" + user.getPhone());
                    System.out.println("请您输入您要修改的内容");
                    phone = sc.next();
                    break;
                case 5:
                    System.out.println("您的邮箱为：" + user.getEmail());
                    System.out.println("请您输入您要修改的内容");
                    email = sc.next();
                    break;
                case 6:
                    msg = baseService.updatePersonalData(user.getUser_id(), username, password, real_name, phone, email);
                    user = (User) msg.getData();
                    break;
                case 7:
                    break loop1;
            }
            System.out.println("是否修改其他内容如修改请继续输入：" + "如确定修改请按 6，退出请按 7");
        }
        return msg;
    }

    /**
     * 查找所有用户数据
     *
     * @return 返回一个Msg对象，其中包含了ArrayList<User>类型的用户数据列表
     */
    private static Msg<ArrayList<User>> findAllUserData() {
        Msg<ArrayList<User>> msg = adminService.findAllUserData();
        ArrayList<User> users = msg.getData();
        System.out.println("用户列表" + "\t\t\t\t\t" + "用户信息");
        int i = 0;
        for (User user1 : users) {
            System.out.println(i + " " + user1);
            i++;
        }
        return msg;
    }

    //修改用户信息

    /**
     * 删除用户信息
     *
     * @return 无返回值
     */
    //删除用户信息
    private static void deleteUserData() {
        Msg msg = null;
        System.out.println("请输入要删除用户的Id：");
        int id = sc.nextInt();
        while (true) {
            System.out.println("是否确定删除(y/n)");
            String flag = sc.next();
            if (flag.equals("y")) {
                msg = adminService.deleteUserData(id);
                if ("SUCCEED".equals(msg.getMsg())) {
                    System.out.println("删除成功");
                } else {
                    System.out.println("您输入的id有误请重新输入");
                }
                System.out.println("是否继续删除(y/n)" + "\t" + "请输入要删除用户的Id：");
                String flag2 = sc.next();
                if (flag2.equals("y")) {
                    id = sc.nextInt();
                } else {
                    break;
                }
            }
        }
    }

    /**
     * 更新用户信息
     */
    private static void updateUserData() {
        System.out.println("用户列表：");
        Msg<ArrayList<User>> users = findAllUserData();
        System.out.println("请输入要修改的用户列表号: ");
        int listId = sc.nextInt();
        User updateUser = users.getData().get(listId);
        updatePersonalData(updateUser);
    }

    /**
     * 管理员添加用户数据
     */
    private static void addUserData() {
        System.out.println("请输入昵称");
        String username = sc.next();
        System.out.println("请输入密码");
        String password = sc.next();
        System.out.println("请输入姓名");
        String realName = sc.next();
        System.out.println("请输入电话");
        String phone = sc.next();
        System.out.println("请输入邮件");
        String email = sc.next();
        System.out.println("请设置身份");
        String role = sc.next();
        User user1 = new User(username, password, realName, phone, email, role);

        Msg<User> user = adminService.addUserData(user1);
        if (user.getMsg() == "SUCCEED") {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

    /**
     * 查询所有火车数据
     *
     * @return Msg<ArrayList < Ticket>> 包含火车票信息的Msg对象
     */
    private static ArrayList<Train> findAllTrainData() {
        Msg<ArrayList<Train>> Trains = baseService.findAllTrainData();
        ArrayList<Train> trains = Trains.getData();
        int i = 0;
        for (Train train : trains) {
            System.out.println(i + " " + train);
            i++;
        }
        return trains;
    }

    /**
     * 更新列车数据
     *
     * @return 无返回值
     */
    private static void updateTrainsData() {
        System.out.println("选择你要修改的车次");
        ArrayList<Train> trains = findAllTrainData();
        int listId = sc.nextInt();

        System.out.println("请输入你要修改的内容 1.出发时间、2.到达时间、3.起始地、4、终点");
        Train train = trains.get(listId);
        loop4:
        while (true) {
            int select = sc.nextInt();
            switch (select) {
                case 1:
                    System.out.println("出发时间为：" + train.getDepartureTime());
                    System.out.println("请输入你要修改的内容：");
                    String departureTime = sc.next();
                    train.setDepartureTime(Date.valueOf(departureTime));
                    break;
                case 2:
                    System.out.println("到达时间为：" + train.getArrivalTime());
                    System.out.println("请输入你要修改的内容：");
                    String arrivalTime = sc.next();
                    train.setArrivalTime(Date.valueOf(arrivalTime));
                    break;
                case 3:
                    System.out.println("出发站为：" + train.getStartStation());
                    System.out.println("请输入你要修改的内容：");
                    String startStation = sc.next();
                    train.setStartStation(startStation);
                    break;
                case 4:
                    System.out.println("终点为：" + train.getEndStation());
                    System.out.println("请输入你要修改的内容：");
                    String endStation = sc.next();
                    train.setEndStation(endStation);
                    break;
                case 5:
                    boolean flag = true;
                    Msg msg = adminService.updateTrainsDao(train);
                    while (flag) {
                        System.out.println("车辆信息已被修改，输您修改票价和座位数要修改的座位类型:硬座，硬卧，软卧");
                        String type = sc.next();
                        Msg<Seat> seat = updateSeatData(type, train.getSeat());
                        if ("SUCCEED".equals(seat.getMsg())) {
                            System.out.println("修改成功");
                        } else {
                            System.out.println("修改失败");
                        }
                        System.out.println(seat.getData());
                        System.out.println("是否继续修改（y/n）");
                        String s = sc.next();
                        if (s.equals("n")) {
                            break;
                        }
                    }
                    break;
                case 6:
                    break loop4;
            }
            System.out.println("是否修改其他内容如修改请继续输入：" + "如确定修改请按 5，退出请按 6");
        }
    }

    /**
     * 更新座位数据
     *
     * @param type 座位类型
     * @param seat 座位对象
     * @return Msg<Seat> 返回座位数据更新后的Msg对象
     */
    private static Msg<Seat> updateSeatData(String type, Seat seat) {
        System.out.println("原始票价：" + seat.getPrice());
        System.out.println("前输入修改的票价");
        String price = sc.next();
        System.out.println("原始座位数" + seat.getNumber());
        System.out.println("请输入座位数");
        int number = sc.nextInt();
        seat.setPrice(price);
        seat.setNumber(number);
        return adminService.updateSeatData(type, seat);
    }


    /**
     * 查询车票信息
     *
     * @return 返回包含查询结果的车票信息列表
     */
    //查询车票信息
    private static ArrayList<Train> FindTicketsMessage() {
        System.out.println("请输入你的乘坐区间");
        System.out.println("请输入开始地址");
        String startStation = sc.next();
        System.out.println("请输入终点");
        String endStation = sc.next();
        System.out.println("请输入乘车时间");
        String time = sc.next();
        ArrayList<Train> tickets = buyTicketsService.findTickesData(startStation, endStation, time ,2);
        int count = 0;
        for (Train train : tickets) {
            System.out.println(count + "\t" + train);
            count++;
        }
        return tickets;
    }

    /**
     * 查找所有管理员数据
     *
     * @return 无返回值，直接输出管理员数据
     */
    private static ArrayList<User> findAllAdminData() {
        ArrayList<User> admins = adminService.findAllAdminData().getData();
        int count = 0;
        for (User admin : admins) {
            System.out.println(count + "\t" + admin);
            count++;
        }
        return admins;
    }

    /**
     * 添加管理员数据
     *
     * <p>这是一个私有静态方法，用于向系统中添加管理员数据。</p>
     *
     * @return 无返回值
     */
    private static void addAdminData() {
        //查找所需要升级管理员的用户信息，将其升级为管理员
        System.out.println("请输入你要升级的用户的电话号码");
        String phone = sc.next();
        int userId = adminService.findUserByPhone(phone);
        if (userId != 0) {
            adminService.addAdminData(userId);
            System.out.println(Msg.msg);
        } else {
            System.out.println("没有该用户，请你查看该用户是否注册");
        }
    }

    /**
     * 删除管理员数据
     *
     * <p>这是一个私有静态方法，用于删除系统中的管理员数据。</p>
     *
     * @return 无返回值
     */
    private static void deleteAdminData() {
        ArrayList<User> admins = findAllAdminData();
        System.out.println("请输入你要删除的管理员列表号：");
        int listId = sc.nextInt();
        int userId = admins.get(listId).getUser_id();
        adminService.deleteAdminData(userId);
        System.out.println(Msg.msg);
    }
    ///////////////////////////////////////////////////////////////////////
    //用户功能

    /**
     * 购买车票
     *
     * @param userId 用户ID
     */
    private static void buyTickets(int userId, String idCard) {
        Train train = baseService.selectTrain();
        ArrayList<User> SelectUser = baseService.SelectUser(userId);
        System.out.println("请输入座位号");
        String seatNumber = sc.next();
        Msg<Orders> msg = null;
        for (int i = 0; i < SelectUser.size(); i++) {
            idCard = SelectUser.get(i).getIdCard();
            //先判断所选择的座位号是否已经被占用，如果被占用则随机自动生成座位号并存储到setNum中
            msg = buyTicketsService.updateTicketsData(userId, idCard, train, seatNumber);
            //如果所选座位已被占座，重新占座，在还有座位的情况下系统自动分配座位
            while ("您的座位号被占用，请重新占座".equals(Msg.msg)) {
                Random rand = new Random();
                // 生成0到100的随机数（包括0和100）
                int randomNumber = rand.nextInt(train.getSeat().getNumber());
                seatNumber = String.valueOf(randomNumber);
                msg = buyTicketsService.updateTicketsData(userId, idCard, train, seatNumber);
            }
        }
        if ("SUCCEED".equals(Msg.msg) || "您还有一个订单未支付，请你确认是否支付".equals(Msg.msg)) {
            System.out.println(Msg.msg);
            System.out.println("是否确定支付（y/n）");
            String payment = sc.next();
            if ("y".equals(payment)) {
                if (msg.getData() != null && train.getDepartureTime().after(msg.getData().getOrderTime())) {
                    // 如果订单时间晚于发车时间，执行购票成功操作
                    buyTicketsService.paymentOk(msg.getData());
                } else {
                    // 如果订单时间早于或等于发车时间，执行一些操作或者记录日志
                    // 这里暂时不执行任何操作，只是打印一条日志
                    System.out.println("订单时间早于或等于发车时间，购票操作未执行,请你重新购票。");
                    removeOrder(msg.getData());
                }
            } else {
                System.out.println("您的订单已存入订单中，请你及时支付");
            }
        }
        System.out.println(Msg.msg);
    }

    /**
     * 查找支付订单
     */
    private static void findPaymentOrder() {
        Msg<ArrayList<Orders>> order = userService.findPaymentOrder(user.getUser_id());
        int count = 0;
        for (Orders o : order.getData()) {
            System.out.println(count + o.show() + "\n" + "***********************************************");
            count++;
        }
    }
    /**
     * 查找未支付订单并打印订单信息，询问用户是否支付
     */
    private static void findNotPaymentOrder() {
        Msg<ArrayList<Orders>> order = userService.findNotPaymentOrder(user.getUser_id());
        int count = 0;
        for (Orders o : order.getData()) {
            System.out.println(count + o.show() + "\n" + "***********************************************");
            count++;
        }

        System.out.println("是否要支付订单（y/n）");
        String flag = sc.next();
        if ("y".equals(flag)) {
            System.out.println("请选择你要支付的订单编号：");
            int num = sc.nextInt();
            buyTicketsService.paymentOk(order.getData().get(num));
        } else {
            System.out.println("请你及时支付，否则订单过期");
        }
    }

    /**
     * 移除订单
     */
    private static void removeOrder(Orders orders) {
        userService.deleteOrder(orders.getOrderId());
        userService.deleteTickets(orders.getTicketId());
    }

    //查询乘车人;
    /**
     * 退票
     */
    private static void returnTickets() {
        //根据电话号码/身份证 查看所在的火车与自己的票
        ArrayList<Ticket> tickets= userService.findMyTickets(user.getPhone());
        int i = 0;
        for (Ticket ticket:tickets) {
            System.out.println(i+"\t"+ticket.show());
            i++;
        }
        System.out.println("请选择你要退的票：");
        int listId = sc.nextInt();
        buyTicketsService.returnTickets(tickets.get(listId));
        System.out.println(Msg.msg);
    }

    /**
     * 分页查询学生列表并显示
     *
     * @param currentPage 当前页码，非0值继续递归查询，0值结束递归
     */
    private static void findPageUserList(int currentPage) {
        if (currentPage!=0){
            ResultPage<User> page =  userService.findPageUserList(currentPage);
            System.out.println("当前学生列表：");
            List<User> users =  page.getLists();  //获取分页的列表
            for (User use : users) {
                System.out.println("\t"+use);
            }
            int totalCount = page.getTotalCount(); //总条数
            int totalPage = page.getTotalPage(); //总页数
            currentPage = page.getCurrentPage(); //当前页
            System.out.println("\n\t共有"+totalCount+"条数数据,共有"+totalPage+"页，当前第"+currentPage+"页");
            System.out.print("\t1.首页\t");
            if (currentPage > 1 && currentPage <totalPage){
                System.out.print("2.上一页 3.下一页 \t");
            }else if (currentPage == 1 && currentPage <totalPage){
                System.out.print("3.下一页 \t");
            }else if(currentPage > 1 && currentPage == totalPage){
                System.out.print("2.上一页 \t");
            }
            System.out.print("4.尾页\t\n");
            System.out.println("请选择：");
            int num = sc.nextInt();
            switch (num){
                case 1: //首页
                    findPageUserList(1);  //递归调用，自己调用自己，调用当前方法
                    break;
                case 2://上一页
                    findPageUserList(currentPage-1); //递归调用
                    break;
                case 3://下一页
                    findPageUserList(currentPage+1); //递归调用
                    break;
                case 4://尾页
                    findPageUserList(totalPage);//递归调用
                    break;
                default:  //结束
                    findPageUserList(0);
                    break;
            }
        }
    }

    //改签
    public static void rebook(){
        //车间距离不能改变
        //查看订单信息选择要改签的票
        ArrayList<Ticket> tickets= userService.findMyTickets(user.getIdCard());
        int i = 0;
        System.out.println("Listid:");
        for (Ticket ticket:tickets) {
            System.out.println(i+"\t"+ticket.show());
            i++;
        }
        //选择要改签的票
        System.out.println("请输入你要改签的票的Listid:");
        int select = sc.nextInt();
        if(select>tickets.size()){
            System.out.println("请检查你输入的ListId"+select+"没有查到次数据");
        }else {
            Ticket ticket = tickets.get(select);
            //根据该票查询未发车的该区间的车辆车票信息//还有票的
            //查询有的话可以改签，//删除数据库相关车票信息，删除订单信息//相关车辆座位+1//重新使用购票操作
            buyTicketsService.rebook(ticket,user.getIdCard());
        }
    }
}
